﻿using System.ComponentModel.DataAnnotations;
using System.Web;
using User.EF.Model;
using User.Global.Constvalues.Web;
using User.Global.Constvalues.Web.Navigation;
using User.Global.Contracts.Mail;
using User.Global.Contracts.Membership;
using User.Global.Resources;
using User.Web.Common.WebAttributes;
using User.Web.Contracts.Model.Account;

namespace User.Web.Models.Account
{
    /// <summary>
    /// Model für das Versenden der PW Recovery E-Mail
    /// </summary>
    public class RecoveryPasswordModel : ModelBase, IRecoveryPasswordModel
    {
        #region Member
        [Required]
        [EmailAddress]
        [DataType(DataType.EmailAddress)]
        [Display(ResourceType = typeof(InputFieldNames), Name = "Username")]
        [HtmlAttributes(CssClass = "form-control", Required = true, Placeholder = "Benutzername (EMail)")]
        public string Username { get; set; }
        #endregion

        #region Public Functions
        /// <summary>
        /// Versenden der PW Revocery EMail - Das das Versenden im "Hintergrund geschieht, kann hier kein True oder False zurückgegeben werden.
        /// </summary>
        public virtual void SendRecoveryMail(IDiMembership<Member> membership, IAccountMails accountMails)
        {
            //Token ermitteln, wenn der User gefunden werden konnte, nur dann die Mail versenden keine gesonderten 
            //Messages aus Sicherheitsgründen ausgeben.
            string token = membership.GeneratePasswordResetToken(Username);
            if (!string.IsNullOrEmpty(token))
            {
                //Die passende Reset URL zusammenbauen die per Mail versendet werden soll
                string resetUrl = string.Format("{0}{1}/{2}?{3}={4}", WebConstValues.WebSiteBaseUrl, EController.Account.ToString(), EActionAccount.RecoverySetNewPassword.ToString(), UrlParameterNamen.Token, HttpUtility.UrlEncode(token));
                accountMails.SendAccountRecoveryMail(resetUrl, Username);    
            }
        }
        #endregion
    }
}
